package com.blumov.fastbox.domain.model.compra;

import com.blumov.fastbox.domain.model.producto.Producto;
import com.blumov.fastbox.domain.shared.ValueObject;

/**
 * Representacion de un item (producto/cantidad) de un pedido.
 * 
 * @author Bruno Masci
 *
 */
public class ItemPedido implements ValueObject<ItemPedido> {

	private static final long serialVersionUID = 1L;

	// Needed by Hibernate
	@SuppressWarnings("unused")
	private Integer id;
	
	private Producto producto;
	private Integer cantidad;

	
	public ItemPedido() {
	    // Needed by Hibernate
	}

	/**
	 * Obtiene el precio de este item
	 */
	public Integer precio() {
		return this.producto.getPrecio() * this.cantidad;
	}
	
	// Getters & setters

	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}
	
	public Integer getCantidad() {
		return cantidad;
	}

	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public boolean sameValueAs(ItemPedido other) {
		return other != null && producto.equals(other.producto) && cantidad.equals(other.cantidad);
	}

	@Override
	public boolean equals(final Object o) {
		if (this == o)
			return true;
		if (o == null || getClass() != o.getClass())
			return false;

		final ItemPedido itemPedido = (ItemPedido) o;

		return sameValueAs(itemPedido);
	}

	@Override
	public int hashCode() {
		return producto.hashCode();
	}
}
